美团集群调度系统HULK技术演进
总第353篇
2019年 第31篇
亲爱的大朋友、小朋友们,中秋节快乐!
值此佳节之际,美美为大家呈送一份技术干货作为中秋礼物。本文根据美团基础架构部/弹性策略团队负责人涂扬在2019 QCon(全球软件开发大会)上的演讲内容整理而成。本文涉及Kubernetes集群管理技术的部分,相关的技术实践可参考此前发布的《美团点评Kubernetes集群管理实践》。
环境配置信息不一致:部分业务线下验证正常,但线上验证却不正常。
业务扩容流程长:从申请机器、资源审核到服务部署,需要5分钟才能完成。
HULK平台包含容器以及弹性调度系统,容器可以统一运行环境、提升交付效率,而弹性调度可以提升业务的资源利用率。在漫威里有个叫HULK的英雄,在情绪激动的时候会变成“绿巨人”,情绪平稳后则恢复人身,这一点跟我们容器的“弹性伸缩”特性比较相像,故取名为“HULK”。
进一步打磨了弹性策略和调度系统。
构建了一站式容器运营平台。
对基础系统软件进行加强,自研内核,提升安全隔离能力。
二、HULK2.0集群调度系统总体架构图
容器弹性:可以让接入的业务按需使用容器实例。
服务画像:负责应用运行情况的搜集和统计,如CPU/IO使用、服务高峰期、上下游等信息,为弹性伸缩、调度系统提供支持。
容器编排和镜像管理:负责对实例进行调度与应用实例构建。
可以看到,一次扩缩容请求基本上会经历以下这些流程:
用户或者上层系统发起扩缩容请求。
扩缩容组件从策略配置中心获取对应服务的配置信息。
将对应的配置信息提交到美团自研的一个API服务(扩展的K8s组件),然后K8s各Master组件就按照原生的工作流程开始Work。
当某个实例调度到具体Node上的时候,开始通过IP分配服务获取对应的Hostname和IP。
Container-init是一号进程,在容器内部拉起各个Agent,然后启动应用程序。针对已经标准化接入的应用,会自动进行服务注册,从而承载流量。
而这些模块是由美团内部不同同学分别进行维护,每次遇到问题时,就需要多个同学分别核对日志信息。可想而知,这种排查问题的方式的成本会有多高。
问题排查提效:之前排查类似问题,多人累计耗时平均需要半个小时。目前,1个管理员通过可视化的界面即可达到分钟级定位到问题。
系统瓶颈可视化:全链路上每个时段的平均耗时信息一览无遗。
3.2 业务定制化需求
业务希望能够去设置一些系统参数,比如开启swap,设置memlock、ulimit等。
环境变量配置,比如应用名、ZooKeeper地址等。
解法:建设一体化的调度策略配置中心,通过调度策略配置中心,可定制化调度规则。
实例基本配置,比如业务想给机器加Set化、泳道标识。
实例的扩展配置:如部分业务,比如某些服务想将实例部署在包含特定硬件的宿主机,会对核心业务有N+1的容灾需求,并且还需要将实例部署在不同的IDC上。
相同配置的应用可以创建一个组,将应用和组进行关联。
Predicates 预选阶段(一堆的预选条件):PodFitsResources检查是否有足够的资源(比如CPU、内存)来满足一个Pod的运行需求,如果不满足,就直接过滤掉这个Node。
LeastRequested:CPU和内存具有相同的权重,资源空闲比越高的节点得分越高。
BalancedResourcesAllocation:CPU和内存使用率越接近的节点得分越高。
将以上优先级函数算出来的值加权平均算出来一个得分(0-10),分数越高,节点越优。
成效:生产环境验证,提升了40%的性能。这个方案目前已经成为社区1.10版本默认的调度策略,技术细节可以参考GitHub上的PR。
容器和系统盘信息丢失。
容器IP变更。
(2)驱逐场景:Kubelet会自动杀死一些违例容器,但有可能是非常核心的业务。
新增Reuse策略,保留原生重启策略(Rebuild)。
定制化CNI插件,基于Pod标识申请和复用IP。
弹性伸缩平台整体架构图如下:
如上图所示,一个业务配置了2条监控策略和1条周期策略:
监控策略:当某个指标(比如QPS、CPU)超过阈值上限后开始扩容,低于阈值下限后开始缩容。
周期策略:在某个固定的时间开始扩容,另外一个固定的时间开始缩容。
早期的设计是各条策略独自决策,扩容顺序有可能是:缩5台、缩2台、扩10台;也有可能是:扩10台、缩5台、缩2台,就会造成一些无效的扩缩行为。
如上图所示,存量中有2个服务,一个需要扩容20台,一个需要扩容15台,这个时候如果新接入一个服务,同一时间需要扩容30台,但是资源池只剩余50台实例了。这个时候就意味着,谁先扩容谁就可以获得资源保障,后发起的请求就无法获得资源保障。
(1)存量资源水位检测:当存量资源的使用水位超过阈值的时候,比如达到80%的时候会有报警,告诉我们需要做资源补充操作。
(2)增量服务弹性资源预估:如果这个服务通过预判算法评估,接入之后可能会导致存量服务的扩容得不到保障,则拒绝或者补充资源后,再让这个业务接入。
4.5 端到端时效问题
技术侧:
开源产品“本土化”:原生的Kubernetes需要和内部已有的基础设施,如服务树、发布系统、服务治理平台、监控系统等做融合,才能更容易在公司内进行落地。
调度决策:增量的调度均使用新策略来进行规范化,存量的可采用重调度器进行治理。
弹性伸缩:公有云在弹性伸缩这块是没有SLA保障的,但是做内部私有云,就需要做好扩容成功率、端到端时延这两块的SLA保障。
业务侧:
业务迁移:建设了全自动化迁移平台,帮助业务从VM自动迁移到容器,极大地降低了因迁移而带来的人力投入。
业务成本:使用HULK可较好地提升业务运维效率(HULK具备资源利用率更高、弹性扩容、一键扩容等特点),降低了业务成本。
作者简介
---------- END ----------
招聘信息
美团点评基础架构团队诚招高级、资深技术专家,Base北京、上海。我们致力于建设美团点评全公司统一的高并发高性能分布式基础架构平台,涵盖数据库、分布式监控、服务治理、高性能通信、消息中间件、基础存储、容器化、集群调度等基础架构主要的技术领域。欢迎有兴趣的同学投送简历到 tech@meituan.com(邮件标题注明:基础架构部弹性策略团队)。